#include <head.h>
int main(int argc, char const *argv[])
{
    pid_t pid1 = 0;
    pid_t pid2 = 0;
    int wait_read;
    char ch = ' ';
    FILE *fp = fopen("file.txt", "r"); // 需要读取的文件
    if (fp == NULL)
    {
        perror("打开文件 file.txt 失败");
        return 1;
    }
    FILE *fp1 = fopen("file1.txt", "w"); // 存放前半部分的文件
    if (fp1 == NULL)
    {
        perror("打开文件 file1.txt 失败");
        fclose(fp);
        return 1;
    }

    FILE *fp2 = fopen("file2.txt", "w"); // 存放后半部分的文件
    if (fp2 == NULL)
    {
        perror("打开文件 file2.txt 失败");
        fclose(fp);
        fclose(fp1);
        return 1;
    }

    fseek(fp, 0, SEEK_END);
    int len = ftell(fp);
    fseek(fp, 0, SEEK_SET);

    if ((pid1 = fork()) < 0)
    {
        perror("fork 失败");
        fclose(fp);
        fclose(fp1);
        fclose(fp2);
        return 1;
    }

    if (pid1 == 0) // 第一个子进程
    {
        printf("这是第一个子进程\n");
        for (int i = 0; i < len / 2; i++)
        {
            ch = fgetc(fp);
            putc(ch, fp1);
        }
        fclose(fp1); // 关闭文件指针
        fclose(fp);  // 关闭父进程的文件指针
        exit(0);     // 结束子进程
    }

    if ((pid2 = fork()) < 0)
    {
        perror("fork 失败");
        fclose(fp);
        fclose(fp1);
        fclose(fp2);
        return 1;
    }

    if (pid2 == 0) // 第二个子进程
    {
        fseek(fp, len / 2, SEEK_SET);
        printf("这是第二个子进程\n");
        for (int i = len / 2; i < len; i++)
        {
            ch = fgetc(fp);
            putc(ch, fp2);
        }
        fclose(fp2); // 关闭文件指针
        fclose(fp);  // 关闭父进程的文件指针
        exit(0);     // 结束子进程
    }

    // 父进程代码
    fclose(fp);  // 关闭父进程的文件指针
    fclose(fp1); // 关闭子进程的文件指针
    fclose(fp2); // 关闭子进程的文件指针

    wait(NULL); // 等待子进程结束
    wait(NULL); // 等待另一子进程结束

    printf("父进程结束\n");
    return 0;
}